home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Creative Computers
/
Creative Computers CD-ROM, Volume 1 (Legendary Design Technologies, Inc.)(1994).iso
/
shareware
/
intuition
/
yak_1.57
/
source
/
help.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-11-17
|
15KB
|
693 lines
/*
* help.c
*
* Opens help/settings window and handles events.
* For yak.
*
* Martin W. Scott, 12-Sep-92.
*/
#include <exec/types.h>
#include <dos/dosextens.h>
#include <graphics/gfxmacros.h>
#include <libraries/commodities.h>
#include <intuition/gadgetclass.h>
#include <intuition/intuition.h>
#include <libraries/gadtools.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/intuition.h>
#include <proto/gadtools.h>
#include <proto/graphics.h>
#include <proto/commodities.h>
#include <string.h>
#include "yak.h"
#include "hotkey_types.h"
#include "popup.h"
#include "version.h"
#define CATCOMP_NUMBERS
#include "yak_locale_strings.h"
static struct Window *curwin;
/* static protos */
static void __regargs InitHelpGadget(UWORD num, LONG tagtype, LONG tagvalue);
static void InitHelpGadgets(void);
static void __regargs InitHotKeyGadget(UWORD num, LONG tagtype, LONG tagvalue);
static void InitHotKeyGadgets(void);
static void __regargs InitMiscGadget(UWORD num, LONG tagtype, LONG tagvalue);
static void InitMiscGadgets(void);
static void __regargs NewPattern(UWORD gdx, UWORD n, struct Gadget *gad);
static BOOL ShowHelpWindow(void);
static BOOL ShowHotKeyWindow(void);
static BOOL ShowMiscWindow(void);
static BOOL SwitchToHotkeyWindow(void);
static BOOL SwitchToMiscWindow(void);
static LONG HandleHelpIDCMP(void);
static LONG HandleHotKeyIDCMP(void);
static LONG HandleMiscIDCMP(void);
/* menu numbers */
#define LOAD 0
#define SAVE 1
#define HIDE 2
#define QUIT 3
/* initialise individual gadget in help window */
static void __regargs
InitHelpGadget(UWORD num, LONG tagtype, LONG tagvalue)
{
GT_SetGadgetAttrs(HelpGadgets[num], HelpWnd, NULL, tagtype, tagvalue, TAG_DONE);
}
/* initialise all gadgets */
static void
InitHelpGadgets(void)
{
UWORD i;
for (i = 0; i < NUM_TOGGLES; i++)
if (toggles[i].gadid != -1)
InitHelpGadget(toggles[i].gadid,
GTCB_Checked,
toggles[i].pos);
InitHelpGadget(GDX_ScrTONum, GTIN_Number, blanksecs);
InitHelpGadget(GDX_MouseTONum, GTIN_Number, mblanksecs);
InitHelpGadget(GDX_AutoPat, GTST_String, (LONG)patterns[YP_AUTOSCR_PAT].patstr);
InitHelpGadget(GDX_ClickPat, GTST_String, (LONG)patterns[YP_CLICKSCR_PAT].patstr);
InitHelpGadget(GDX_PopPat, GTST_String, (LONG)patterns[YP_POPWIN_PAT].patstr);
InitHelpGadget(GDX_ClickWinPat, GTST_String, (LONG)patterns[YP_CLICKWIN_PAT].patstr);
InitHelpGadget(GDX_ClickWinPat, GTCY_Active, qualifier);
}
/* show current window */
BOOL
ShowWindow(void)
{
if (curwin) /* already opened */
{
ScreenToFront(curwin->WScreen);
WindowToFront(curwin);
ActivateWindow(curwin);
return TRUE;
}
if (SetupScreen())
return FALSE;
return ShowHelpWindow();
}
/* show our help window */
static BOOL
ShowHelpWindow(void)
{
InitGUI ();
if (!OpenHelpWindow()) /* like the name says... */
{
InitHelpGadgets();
wndsigflag = 1 << HelpWnd->UserPort->mp_SigBit;
curwin = HelpWnd;
return TRUE;
}
CloseDownScreen();
return FALSE;
}
/* show our hotkey window */
static BOOL
ShowHotKeyWindow(void)
{
if (!OpenHotKeyWindow()) /* like the name says... */
{
InitHotKeyGadgets();
wndsigflag = 1 << HotKeyWnd->UserPort->mp_SigBit;
curwin = HotKeyWnd;
return TRUE;
}
CloseDownScreen();
return FALSE;
}
/* show our misc window */
static BOOL
ShowMiscWindow(void)
{
if (!OpenMiscWindow()) /* like the name says... */
{
InitMiscGadgets();
wndsigflag = 1 << MiscWnd->UserPort->mp_SigBit;
curwin = MiscWnd;
return TRUE;
}
CloseDownScreen();
return FALSE;
}
/* update windows position for next openings */
void
UpdateWindowsPosition (void)
{
HelpLeft = curwin->LeftEdge;
WindowTop = curwin->TopEdge;
}
/* hide our window */
void
HideWindow(void)
{
if (curwin)
{
UpdateWindowsPosition();
if (curwin == HelpWnd)
CloseHelpWindow();
else
if (curwin == MiscWnd)
CloseMiscWindow();
else
CloseHotKeyWindow();
CloseDownScreen();
wndsigflag = NULL;
curwin = HelpWnd = HotKeyWnd = MiscWnd = NULL;
}
}
/* switch from help window to hotkey window */
static BOOL
SwitchToHotkeyWindow(void)
{
HotKeyLeft = HelpWnd->LeftEdge;
WindowTop = HelpWnd->TopEdge;
CloseHelpWindow();
return ShowHotKeyWindow();
}
/* switch from help window to misc window */
static BOOL
SwitchToMiscWindow(void)
{
MiscLeft = HelpWnd->LeftEdge;
WindowTop = HelpWnd->TopEdge;
CloseHelpWindow();
return ShowMiscWindow();
}
/* handle pattern string-gadget */
static void __regargs
NewPattern(UWORD gdx, UWORD n, struct Gadget *gad)
{
char *newpatstr;
newpatstr = GetString(gad);
if (!InitPattern(newpatstr, n))
{
DisplayBeep(Scr);
InitHelpGadget(gdx, GTST_String, (LONG)patterns[n].patstr);
}
}
/* handle window events */
LONG
HandleIDCMP(void)
{
if (curwin == HelpWnd)
return HandleHelpIDCMP();
else
if (curwin == MiscWnd)
return HandleMiscIDCMP();
else
return HandleHotKeyIDCMP();
}
/* handle help window events */
static LONG
HandleHelpIDCMP(void)
{
struct IntuiMessage *msg;
struct Gadget *gadget;
ULONG class;
UWORD code;
LONG num;
while (msg = GT_GetIMsg(HelpWnd->UserPort))
{
class = msg->Class;
code = msg->Code;
gadget = (struct Gadget *)msg->IAddress;
GT_ReplyIMsg(msg);
switch (class)
{
case CLOSEWINDOW:
HideWindow();
return HELP_OKAY;
case GADGETUP:
case GADGETDOWN:
switch (gadget->GadgetID)
{
case GD_EditHotkeys:
if (!SwitchToHotkeyWindow())
PostError(getString(Couldnt_open_other_window_ERR));
return HELP_OKAY;
case GD_Miscellaneous:
if (!SwitchToMiscWindow())
PostError(getString(Couldnt_open_other_window_ERR));
return HELP_OKAY;
case GD_AutoPat:
NewPattern(GDX_AutoPat, YP_AUTOSCR_PAT, gadget);
break;
case GD_ClickPat:
NewPattern(GDX_ClickPat, YP_CLICKSCR_PAT, gadget);
break;
case GD_PopPat:
NewPattern(GDX_PopPat, YP_POPWIN_PAT, gadget);
break;
case GD_ClickWinPat:
NewPattern(GDX_ClickWinPat, YP_CLICKWIN_PAT, gadget);
break;
case GD_Hide:
HideWindow();
return HELP_OKAY;
case GD_Quit:
HideWindow();
return HELP_QUIT;
case GD_AutoCheck: /* toggle */
autopoint ^= TRUE;
break;
case GD_AutoPopCheck: /* toggle */
autopop ^= TRUE;
break;
case GD_KeyActCheck: /* toggle */
keyactivate ^= TRUE;
break;
case GD_CTFCheck: /* toggle */
clicktofront ^= TRUE;
break;
case GD_CTBCheck: /* toggle */
clicktoback ^= TRUE;
break;
case GD_ScrCycleCheck: /* toggle */
screencycle ^= TRUE;
break;
case GD_WildStarCheck: /* toggle */
wildstar ^= TRUE;
if (wildstar) WILDSTARON; else WILDSTAROFF;
break;
case GD_NoClickCheck: /* toggle */
noclick ^= TRUE;
SetClickDrive(noclick);
break;
case GD_ScrActCheck: /* toggle */
scractivate ^= TRUE;
break;
case GD_RMBActCheck: /* toggle */
rmbactivate ^= TRUE;
break;
case GD_MMBActCheck: /* toggle */
mmbactivate ^= TRUE;
break;
case GD_ScrTONum:
num = GetNumber(gadget);
if (num >= 0) {
blanksecs = num;
blankcount = blanktimeout = blanksecs*10;
} else {
InitHelpGadget(GDX_ScrTONum, GTIN_Number, blanksecs);
DisplayBeep(HelpWnd->WScreen);
}
break;
case GD_MouseTONum:
num = GetNumber(gadget);
if (num >= 0) {
mblanksecs = num;
mblankcount = mblanktimeout = mblanksecs*10;
} else {
InitHelpGadget(GDX_MouseTONum, GTIN_Number, mblanksecs);
DisplayBeep(HelpWnd->WScreen);
}
break;
} /* switch (gadget->GadgetID) */
break;
case REFRESHWINDOW:
GT_BeginRefresh(HelpWnd);
HelpRender();
GT_EndRefresh(HelpWnd, TRUE);
break;
case IDCMP_MENUPICK:
while (code != MENUNULL)
{
struct MenuItem *item = ItemAddress(HelpMenus, code);
switch (ITEMNUM(code))
{
case LOAD:
LoadSettings();
InitHelpGadgets();
break;
case SAVE:
SaveSettings();
break;
case HIDE:
HideWindow();
return HELP_OKAY;
case QUIT:
HideWindow();
return HELP_QUIT;
}
code = item->NextSelect;
} /* while more menuchoices */
break;
} /* switch (class) */
} /* wh